package interfaz;

import Entidades.Pasajero;
import gestoresPasajeros.GestorPasajeros;
import gestoresPasajeros.NomencladorDatosPersonales;
import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.List;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;





public class GestionarPasajeros extends javax.swing.JFrame {
    
    //Declaracion de Variables//
    private int limite  = 30;         //limitar la cantidad de caracteres ingresados en los texfields
    private int limiteDoc = 8;
    private JButton boton_Buscar=new JButton();
    private JButton boton_Cancelar=new JButton();
    private JButton boton_Siguiente=new JButton();
    private JComboBox <String> box_TipoDoc=new <String> JComboBox();
    private JScrollPane jScrollPane1=new JScrollPane();
    private JLabel lbl_Apellido=new JLabel();
    private JLabel lbl_Nombre=new JLabel();
    private JLabel lbl_TipoDoc=new JLabel();
    private JLabel lbl_nroDoc=new JLabel();
    private JTable tablaPasajeros=new JTable();
    private JTextField txt_Apellido=new JTextField();
    private JTextField txt_Nombre=new JTextField();
    private JTextField txt_nroDoc=new JTextField();
    private DefaultTableModel datosPasajeros;
 
    //Consutructor de la interfaz
    public GestionarPasajeros() {
        
        initComponents();
        soloMayusculas();
        posicionarElementos();
        inicializarComboBox();
        this.setVisible(true);
    }


	public void GestionarPasajeros() {
		
	}
        

	
	private void buscarPasajeros(String apellido,String nombre, String tipoDoc, String nro){
            int count=0;
             GestorPasajeros gestor= GestorPasajeros.getInstance();
             List <Pasajero> resultados= gestor.buscarPasajeros( apellido, nombre, tipoDoc,  nro);
           
             //limpiamos la tabla de los datos previos
             int limpiar=datosPasajeros.getRowCount();
             for(int i=limpiar;i>0;i--){
                 datosPasajeros.removeRow(i-1); }
           
             //cargamos los nuevos pasajeros encontrados
             for(Pasajero unPasajero: resultados){
                  datosPasajeros.addRow(new Object[]{unPasajero.getApellido(),unPasajero.getNombre(),
                                                    unPasajero.getTipoDoc().getDescripcion(),String.valueOf(unPasajero.getNroDoc())  });
                  count++;
              }
             if (count==0){
               JOptionPane.showMessageDialog(null, "No se han encontrado coincidencia, Presione 'OK Para dar de alta un pasajero","Atención",JOptionPane.OK_OPTION);
               this.dispose();
               AltaPasajero alta=new AltaPasajero();
             }
             
		
	}
	
	public int obtenerSeleccionado(){
		return 0;
	}
    
   
 
   
    @SuppressWarnings("unchecked")
                           
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        lbl_Apellido.setText("Apellido");
        lbl_Nombre.setText("Nombres");
        lbl_TipoDoc.setText("Tipo");
        lbl_nroDoc.setText("Documento");
        
        /* ************COMIENZO PARA EL LÍMITE DE LOS TEXTFIELDS*********************** */
        txt_Apellido.addKeyListener(new KeyListener(){
            public void keyTyped(KeyEvent e){
                if (txt_Apellido.getText().length()== limite){
                    getToolkit().beep();
                    e.consume();
                    
                }
                }
            public void keyPressed(KeyEvent arg0) {}
            public void keyReleased(KeyEvent arg0){}
              });
        
        txt_Nombre.addKeyListener(new KeyListener(){
            public void keyTyped(KeyEvent e){
                if (txt_Nombre.getText().length()== limite){
                    getToolkit().beep();
                    e.consume();
                    
                }
                }
            public void keyPressed(KeyEvent arg0) {}
            public void keyReleased(KeyEvent arg0){}
              });
        
        txt_nroDoc.addKeyListener(new KeyListener(){
            public void keyTyped(KeyEvent e){
                if (txt_nroDoc.getText().length()== limiteDoc){
                    getToolkit().beep();
                    e.consume();
                    
                }
                }
            public void keyPressed(KeyEvent arg0) {}
            public void keyReleased(KeyEvent arg0){}
              });
        
        boton_Buscar.setText("BUSCAR");
        
        boton_Buscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                boton_BuscarActionPerformed(evt);
            }
        });
        
      
    
              
           boton_Cancelar.setText("CANCELAR");
        boton_Cancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                boton_CancelarActionPerformed(evt);
            }
        });

        boton_Siguiente.setText("SIGUIENTE");
        boton_Siguiente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                boton_SiguienteActionPerformed(evt);
            }
        });
        
       //creo el TableModel con los titulos de la tabla de consulta
      datosPasajeros=new DefaultTableModel( new String [] {"Apellido", "Nombres", "Tipo Documento", "N° Documento"}, 0);
       
      //creo la tabla con los datos anteriores
	 tablaPasajeros = new JTable(datosPasajeros);
         jScrollPane1.setViewportView(tablaPasajeros);
    }
    
    private void posicionarElementos(){
     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 325, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(lbl_Apellido)
                    .addComponent(lbl_TipoDoc)
                    .addComponent(txt_Apellido)
                    .addComponent(box_TipoDoc, 0, 100, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lbl_Nombre)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(txt_Nombre, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 90, Short.MAX_VALUE)
                            .addComponent(lbl_nroDoc, javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(txt_nroDoc, javax.swing.GroupLayout.Alignment.LEADING))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(boton_Buscar, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(22, 22, 22))
            .addGroup(layout.createSequentialGroup()
                .addGap(75, 75, 75)
                .addComponent(boton_Cancelar)
                .addGap(28, 28, 28)
                .addComponent(boton_Siguiente)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbl_Apellido)
                    .addComponent(lbl_Nombre))
                .addGap(3, 3, 3)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txt_Apellido, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txt_Nombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbl_TipoDoc)
                    .addComponent(lbl_nroDoc))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(box_TipoDoc, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txt_nroDoc, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(boton_Buscar))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(boton_Cancelar)
                    .addComponent(boton_Siguiente))
                .addContainerGap(21, Short.MAX_VALUE))
        );

        pack();}

        private void soloMayusculas(){
    
//primero obtenemos le FocusManager (que a su vez es el KeyEventDispatcher)
KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();

//y enseguida registramos nuestro dispatcher
manager.addKeyEventDispatcher(new KeyEventDispatcher(){
        @Override
        public boolean dispatchKeyEvent(KeyEvent e) {

                //como dije, solo las notificaciones del tipo "typed" son las que actualizan los componentes
                if(e.getID() == KeyEvent.KEY_TYPED){

                        //como vamos a convertir todo a mayúsculas, entonces solo checamos si los caracteres son
                        //minusculas
                        if(e.getKeyChar() >= 'a' && e.getKeyChar() <= 'z'){
                                //si lo son, entonces lo reemplazamos por su respectivo en mayúscula en el mismo evento
                                // (esto se logra por que en java todas las variables son pasadas por referencia)
                                e.setKeyChar((char)(((int)e.getKeyChar()) - 32));
                        }
                }
                //ya que por default la propiedad name en los jtextfield es nula, debemos hacer la comprobación que se me estaba pasando.
            if(e.getSource() instanceof JComponent
                && ((JComponent)e.getSource()).getName() != null
                && ((JComponent)e.getSource()).getName().startsWith("ignore_upper_case")){
        return false;
}
                //y listo, regresamos siempre falso para que las demas notificaciones continuen, si regresamos true
                // significa que el dispatcher consumio el evento
                return false;
        }

    
   
});}
     private void inicializarComboBox(){
       NomencladorDatosPersonales nomDP= NomencladorDatosPersonales.getInstance();
              
        for(String str: nomDP.getListadoTipoDni()){             
              box_TipoDoc.addItem(str);}
          
     }
    
     //AL APRETAR ENTER SOBRE EL BOTÓN B REALICE LA ACCION
     private void boton_BuscarActionKeyPressed(KeyEvent evt) {
		
		// Si la tecla presionada es el ENTER (KeyCode = 10) enviamos el mensaje
		if (evt.getKeyCode()==10)
		{
		     GestorPasajeros gestor= GestorPasajeros.getInstance();
                     if( gestor.validarCampos(txt_Nombre.getText(), txt_Apellido.getText())&&
                           gestor.validarDNI((String) box_TipoDoc.getSelectedItem(),txt_nroDoc.getText(),1)){
       
                                 buscarPasajeros(txt_Apellido.getText(), txt_Nombre.getText(),(String) box_TipoDoc.getSelectedItem(), txt_nroDoc.getText());
                       } 
		}
	}
     
     
    private void boton_BuscarActionPerformed(java.awt.event.ActionEvent evt) {
         GestorPasajeros gestor= GestorPasajeros.getInstance();
        if( gestor.validarCampos(txt_Nombre.getText(), txt_Apellido.getText())&&
         gestor.validarDNI((String) box_TipoDoc.getSelectedItem(),txt_nroDoc.getText(),1)){
       
         buscarPasajeros(txt_Apellido.getText(), txt_Nombre.getText(),(String) box_TipoDoc.getSelectedItem(), txt_nroDoc.getText());
    } 
    }                                            

    private void boton_CancelarActionPerformed(java.awt.event.ActionEvent evt) {   
        this.dispose();
        Menu_Principal menu= new Menu_Principal();
    }                                              

    private void boton_SiguienteActionPerformed(java.awt.event.ActionEvent evt) { 
         
        AltaPasajero alta=new AltaPasajero();
        this.dispose();
       

     
    }                                               

   
    public static void main(String args[]) {
    

        
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new GestionarPasajeros().setVisible(true);
            }
        });
    }

               
}
